Funksione te koleksioneve Array
Koleksionet Array jane koleksione te cilat na sherbejne per mbajtjen e te dhenave te shumta ne forme te menaxhueshme. Permendem me siper qe kemi disa lloje array-sh, te indeksuar, associative
dhe multidimensional
. Per manipulimin dhe procesimin e ketyre koleksioneve, PHP-ja permban shume funksione te brendshme te cilat nuk eshte e nevojshme te importohen nga jashte, por vijne sebashku me te. Me poshte do te listojme dhe shpjegojme nje pjese te funksioneve kryesore te koleksioneve array
te cilat do te na duhen per perdorim te vazhdueshem.
array_merge
array_merge($array [, ...$array...])
Si input mund te pranoje nje ose me shume koleksione array.
Ne rast se ne hyrje i kalojme vetem nje array te indeksuar, ky funksion riindekson (krijon indekset nga fillimi) kete array dhe e kthen ate. Riindeksim do te thote vendosje e indekseve nga e para. P.sh. supozojme qe nje array $arr
ka indekset jane [0]
, [2]
, [3]
per arsyje se elementi i dyte mund te jete bere unset
ose prej ndonje arsyeje tjeter. Ne rast se mbi array-n e mesiperm aplikojme funksionin array_merge($arr)
do te na kthehet nje array i ri me indekse te rivendosur [0]
, [1]
, [2]
sipas radhes.
Ne rast se ne hyrje i kalojme dy ose me shume array, do te na kthehet nje array i ri me vlera te kombinuara te te gjithe koleksioneve array te vendosura ne hyrje. Sa i perket indekseve numerike te array-ve, ata do te rivendosen ne menyre te tille qe asnje element i array-ve te mos humbase. Sa i perket celsave associative
, ne rast se keto array kane celesa te njejte, disa vlera do te humbasin pasi do te ruhen vetem vlerat e elementeve te array-t te fundit te vendosur ne hyrje.
Shembull: Rasti kur vendosim nje array ne hyrje:
$array = array ( 3 => 'nje', 0 => 'dy', 2 => 'tre' );
$merged_array = array_merge($array);
print_r($merged_array);
Pas printimit te $merged_array
, rezultati ne dalje do te jete:
Array
(
[0] => nje
[1] => dy
[2] => tre
)
Rasti kur vendosim me shume se nje array ne hyrje:
$array1 = array ( 'zero', 'nje', 'emri' => 'Arber' );
$array2 = array ( 'tre', 'emri' => 'Joni', 'profesioni' => 'mesues' );
$merged_array = array_merge($array1, $array2);
print_r( $merged_array );
Rezultati:
Array
(
[0] => zero
[1] => nje
[emri] => Joni
[2] => tre
[profesioni] => mesues
)
Dy koleksionet array ne hyrje kishin nga 3 elemente, te dyja sebashku 6 elemente, por pas printimit shohim qe array i formuar permban 5 elemente. Arsyeja pse kjo ka ndodhur eshte per shkak te celesit associative
me vlere emri
i cili gjendet ne te dyja array-t e aplikuara. Kjo perplasje ben qe te ruhet vetem celesi i array-t te futur se fundmi ne hyrje, ci cili eshte $array2
. Ndaj edhe vlera e celesit emri
eshte Joni
pasi kjo vlere gjendej ne array-n e dyte.
$array1 + $array2
Ne rast se perdorim simbolin +
per te bashkuar dy array atehere:
- Array i pare ka me shume prioritet
- Ne rast se gjenden celesa
associative
te njejte ndermjet ketyre koleksioneve, do te ruhen vetem celesat e array-t te pare - Ne rast se gjenden indekse te njejta ndermjet ketyre koleksioneve, do te ruhen vetem celesat e array-t te pare, p.sh. elementi me indeks
[0]
i array-t te pare e mbishkruan elementin me indeks[0]
te array-t te dyte.
Shembull:
$array = array ( 'zero', 'emri' => 'Arber', 'profesioni' => 'inxhinier' );
$array2 = array ( 'tre', 'profesioni' => 'mesues', 'mosha' => 32 );
print_r( $array + $array2 );
Rezultati:
Array
(
[0] => zero
[emri] => Arber
[profesioni] => mesues
[mosha] => 32
)
Elementi [0]
me vlere tre
i array-t te dyte nuk eshte printuar pasi ai mposhtet nga elementi [0]
i array-t te pare me vlere zero
. Elementi me celes profesioni
i array-t te dyte nuk eshte printuar pasi ai mposhtet nga elementi me celes profesioni
i array-t te pare. Elementi me celes mosha
i array-t te dyte eshte printuar pasi ai eshte unik, nuk gjendet ne array-n e pare nje celes i tille.
count
count($array [, mode])
mode – [opsional] $integer default: 0,
Ky funksion llogarit numrin e elementeve te koleksionit array ne hyrje dhe e kthen ate. Ne rast se parametri opsional mode
nuk vendoset, vlera e tij mbetet default 0
, e cila nuk i numeron koleksionet array te brendshme (ne rastin e array-ve multidimensional), por numeron vetem elementet e array-t prind. Ne rast se parametri mode
vendoset 1
, atehere numerohen edhe elementet e array-ve te brendshme ne rast se ka.
Shembull:
$array = array ('zero',
'emrat' => array ( 'Arber', 'Endri' ),
'moshat' => array ( 26, 25 ) );
echo count($array);
Rezultati: 3
Ne rast se mode
vendoset 1
:
echo count($array, 1);
Rezultati ne daljet do te jete 7
, pasi array prind permban 3 elemente, array i brendshem me celes emrat
permban 2 elemente, dhe array i brendshem me celes moshat
permban 2 elemente. Ne total llogariten 7
elemente.
array_diff
array_diff(first_array, $array [, ...$array...])
Pranon si parametra ne hyrje dy ose me shume array. Te gjitha vlerat e array-ve te tjere krahasohen me vlerat ne array-n e pare first_array
te dhene ne hyrje. Si output kthehet nje array i ri me te gjitha vlerat e first_array
te cilat nuk ndodhen si vlera tek array-t e tjere.
Shembull:
$array1 = array( 'nje', 'dy', 'tre', 'kater' );
$array2 = array( 'dy', 'tre' );
$array3 = array( 'arber' => 'nje' );
$new_array = array_diff($array, $array2, $array3);
print_r( $new_array );
Rezultati:
Array ( [3] => kater )
Shohim qe ne dalje kthehet nje array me vetem nje element me vlere kater
. $array1
permban kater vlera 'nje', 'dy', 'tre', 'kater'
. Nga keto kater vlera, 'dy', 'tre'
gjenden ne arrayn e dyte $array2
ndaj perjashtohen ne output. Array i trete $array3
ka element me celes associative 'arber' => 'nje'
me celes arber
, por vlere nje
. Ajo krahasohet me array-n e pare eshte vlera dhe jo celesi, ndaj edhe vlera nje
perjashtohet ne output. I vetmi element qe mbetet eshte elementi me vlere kater
, i cili a indeks [3]
pasi eshte elementi i katert ne $array1
.
array_diff_key()
– kryen te njejtin funksion por bazohet ne celesat dhe jo ne vlerat e array-ve.array_diff_assoc()
- kryen te njejtin funksion por bazohet ne vlerat dhe ne celesat array-ve, te dyja sebashku.array_intersect()
- Ne ndryshim nga funksionet e mesiperme, kthen nje array te ri me elementet qe jane prezent ne te gjitha array-t ne hyrje.
Shembuj:
$array1 = array( 'zero', 'emri' => 'arber', 'pseudonimi' => 'arbi' );
$array2 = array( 'tre', 'pseudonimi' => 'arber' );
$new_array = array_diff_key($array1, $array2);
print_r( $new_array );
Rezultati:
Array ( [emri] => arber )
$array1 = array( 'zero', 'nje', 'emri' => 'arber' );
$array2 = array( 'zero', 'tre', 'emri' => 'arber' );
print_r( array_diff_assoc($array1, $array2) );
Rezultati:
Array ( [1] => nje )
$array1 = array( 'nje', 'dy');
$array2 = array( 'dy', 'nje', 'tre', 'kater' );
$array3 = array( 'arber' => 'nje' );
//Shohim qe vetem vlera 'nje' gjendet tek te treja array-t
print_r( array_intersect($array1, $array2, $array3) );
Rezultati:
Array ( [0] => nje )
array_flip
array_flip($array)
Merr ne hyrje nje array dhe kthen nje array te ri i cili ka si vlera, celesat e array-t hyres, dhe ka si celesa , clerat e array-t hyres. Pra, be nje konvertim te celesave ne vlera, dhe anasjelltas.
Shembull:
$array = array( 'CEO' => 'Alban', 'Pronar' => 'Arber' );
$new_array = array_flip($array);
print_r( $new_array );
Rezultati:
Array
(
[Alban] => CEO
[Arber] => Pronar
)
array_reverse
array_reverse ( array $array [, bool $preserve_keys = false ] )
Merr ne hyrje nje array dhe kthen nje array te ri me renditjen e elementeve ne te kundert.
Nqs. parametri opsional preserve_keys
vendoset TRUE
, atehere celesat numerik ruhen, pavaresisht ndryshimit te renditjes.
Shembull:
$input = array("php", 4, array("green", "red"));
$reversed = array_reverse($input);
print_r($reversed);
Rezultati:
Array
(
[0] => Array
(
[0] => green
[1] => red
)
[1] => 4
[2] => php
)
Ne rastin kur kalojme parametrin e dyte TRUE
:
$input = array("php", 4, array("green", "red"));
$preserved = array_reverse($input, TRUE);
print_r($preserved);
Pavaresisht ndryshimit te renditjes, indekset numerike ruhen sipas elementit qe kishin me pare:
Array
(
[2] => Array
(
[0] => green
[1] => red
)
[1] => 4
[0] => php
)
array_key_exists
array_key_exists ( $key , $array )
Funksioni kthen TRUE
ne rast se celesi i dhene eshte vendosur ne $array
. Celesi mund te jete cfaredo lloj vlere e mundshme per nje indeks ne array.
Shembull:
$search_array = array('ckemi' => 1, 'pershendetje' => 2);
if (array_key_exists('ckemi', $search_array)) {
echo "Celesi 'ckemi' gjendet ne array.";
}
Rezultati: Celesi 'ckemi' gjendet ne array.
Pra, ne kushtin if
behet kontrolli nqs. celesi ckemi
gjendet ne array i vendosur apo jo. Dukeqenese ai eshte vendosur, funksioni kthen TRUE
ndaj ekzekutohet blloku i kodit brenda kushtit if
.
array_search
array_search ( $needle , array $haystack [, bool $strict = false ] )
Kontrollohet nqs. $needle
(mund te jete string, integer apo dicka tjeter) gjendet ne array-n $haystack
. Ne rast se po atehere kthehet celesi perkates i array-t per elementin e gjetur ne rastisjen e tij te pare. Ne rast se nuk gjendet kthehet FALSE
. Nqs. $needle
eshte nje string, krahasimi behet case-sensitive
. Ne rast se parametrin e trete opsional $strict
e vendosim TRUE
atehere kerkimi behet me strikt si p.sh. stringa '1'
nuk konsiderohet e barabarte me numrin 1
.
Shembull:
$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');
$key = array_search('green', $array); // $key = 2;
echo $key;
Rezultati: 2
$key = array_search('red', $array); // $key = 1;
echo $key;
Rezultati: 1
in_array
in_array ( $needle , array $haystack [, bool $strict = FALSE ] )
Kontrollon nqs. nje vlere $needle
gjendet ne array $haystack
. Kthen TRUE
nqs. vlera gjendet, perndryshe kthen FALSE
. Nqs. $needle
eshte nje string, krahasimi behet case-sensitive
Ne rast se parametrin e trete opsional $strict
e vendosim TRUE
, atehere kontrolli behet me strikt si p.sh. stringa '1'
nuk konsiderohet e barabarte me numrin 1
.
Shembull:
$os = array("Linux", "Windows", "Mac");
if (in_array("Linux", $os)) {
echo "Gjendet Linux";
}
Rezultati ne dalje do te jete Gjendet Linux
, sepse vlera Linux
eshte e pranishme ne array-n $os
.
if (in_array("mac", $os)) {
echo "Gjendet mac";
}
Me lart nuk do te printohet asgje pasi vlera mac
nuk gjendet ne array-n $os
. Parashtruam qe ne rastin e stringave kerkimi behet case-sensitive
, keshtu qe vlera Mac
(e cila gjendet ne array) nuk eshte e njejte me vleren mac
.
array_pop
array_pop ( array &$array )
Kthen elementin e fundit te array-t ne hyrje, si dhe ndryshon madhesine e array-t ne hyrje duke e shkurtuar, me elementin e fundit te fshire. Parametri ne hyrje kalon me reference, ndaj duhet te dime qe ndryshimi behet mbi array-n origjinal, dhe jo kopje e tij.
Shembull:
$stack = array("portokall", "banane", "molle", "luleshtrydhe");
$frut = array_pop($stack);
print_r($stack);
Rezultati ne dalje do te jete array me nje element te hequr:
Array
(
[0] => portokall
[1] => banane
[2] => molle
)
Ne rast se do te printojme vleren e kthyer nga funksioni:
echo $frut;
Rezultati: luleshtrydhe
array_push
int array_push ( array &$array , mixed $value1 [, mixed $... ] )
Shton nje ose me shume elemente ne fundin e array-t te dhene ne hyrje. Array ne hyrje futet me reference, ndaj ndryshimi do te behet mbi te. Funksioni kthen numrin e ri te elementeve te array-t te ndertuar. Funksioni i mesiperm ka te njejtin efekte me deklaraten:
$array[] = "vlere e dhene";
Pra, ashtu si kjo deklarate shton nje element ne fund te array-t $array
, ashtu mund te shtohet edhe me funksionin array_push
:
array_push($array, "vlere e dhene");
Shembull:
$stack = array("portokall", "banane");
array_push($stack, "molle", "luleshtrydhe");
print_r($stack);
Rezultati:
Array
(
[0] => portokall
[1] => banane
[2] => molle
[3] => luleshtrydhe
)
array_shift
array_shift ( array &$array )
Zhvendos (heq) elementin e pare te array-t dhe e kthen ate. Edhe ne kete rast array ne hyrje kalohet me reference. Ne rast se array eshte i perbere nga indekse numerike, nqs. elementi qe hiqet eshte me indeks numerik, atehere indekset numerike ne array do te modifikohen qe te nisin nga zero, ndersa celesat jo numerike nuk do te preken.
Ne rast se parametri ne hyrje eshte array bosh, ose nuk eshte array atehere funksioni do te ktheje NULL
.
Shembull:
$stack = array("portokall", "banane", "molle", "luleshtrydhe");
$frut = array_shift($stack);
print_r($stack);
Rezultati:
Array
(
[0] => banane
[1] => molle
[2] => luleshtrydhe
)
echo $frut;
Rezultati: portokall
array_unshift
array_unshift ( array &$array , mixed $value1 [, mixed $... ] )
Shton nje ose me shume elemente ne fillim te array-t. Elementet e shtuara do te mbajne te njejten renditje ne array ashtu sic renditen kur jepen si parametra ne funksion. Indekset numerike ne array do te modifikohen qe te nisin nga zero, ndersa celesat jo numerike nuk do te preken. Funksioni kthen numrin e elementeve te array-t te ri te ndertuar.
Shembull:
$queue = array("portokall", "banane");
array_unshift($queue, "molle", "luleshtrydhe");
print_r($queue);
Rezultati:
Array
(
[0] => molle
[1] => luleshtrydhe
[2] => portokall
[3] => banane
)
sort
sort(array $array [, sort_flag])
sort_flag – [opsional] default: SORT_REGULAR (krahason elementet normalisht)
SORT_NUMERIC (krahason elementet numerikisht)
SORT_STRING (krahason elementet si stringa)
etj...
Funksioni radhit elementet e nje array nga me i vogli tek me i madhi dhe riindekson (rivendos indekset) te gjitha vlerat, duke i shkaterruar elementet celesat aktual. Ne rast se parametri i dyte opsional nuk kalohet behet nje krahasim normal i elementeve, perndryshe behet krahasimi ne varesi te vleres se tij si krahasim numerik, krahasim si stringe etj.
Shembull:
$frute = array("limon", "portokall", "banane", "molle");
sort($frute);
foreach ($frute as $key => $val) {
echo "frute[" . $key . "] = " . $val . "\n";
}
Rezultati ne dalje i shfaq te radhitura ne menyre alfabetike:
frute[0] = banane
frute[1] = limon
frute[2] = molle
frute[3] = portokall
- asort() – kryen te njejtin funksion vetem se celesat mbahen (nuk rivendosen)
- ksort() - kryen te njejtin funksion vetem se radhit celesat dhe jo vlerat
- rsort() - ka te njejtin funksion vetem se behet radhitja nga me i madhi tek me i vogli.